package util;

import java.util.List;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import model.Paquete;
import model.Usuario;

public class EnviarCorreo {

    public void enviarCambioPassword(String correo, String newPassword) {
        try {
            //Key clave = KeyGenerator.getInstance(usuarioController.ALGORITMO).generateKey();

            //Cipher c = Cipher.getInstance(usuarioController.ALGORITMO);
            String subject = "RedEx - Cambio Contraseña";
            String message = "Estimado(a),\n\n"
                    + "Su nueva contrasena es: " + newPassword + "\n\n"
                    + "Atentamente, \n\n"
                    + "Equipo de Seguridad,\n"
                    + "RedEx";

            // Se debe crear un <span id="IL_AD4" class="IL_AD">archivo</span> de propiedades que
            // contenga el nombre del servidor SMTP
            Properties props = new Properties();

            // Nombre del host de correo, es smtp.gmail.com
            props.setProperty("mail.smtp.host", "smtp.gmail.com");
            // TLS si está disponible
            props.setProperty("mail.smtp.starttls.enable", "true");
            // Puerto de gmail para envio de correos
            props.setProperty("mail.smtp.port", "587");
            // Nombre del usuario
            props.setProperty("mail.smtp.user", "dp1.grupod@gmail.com");
            // Si requiere o no usuario y password para conectarse.
            props.setProperty("mail.smtp.auth", "false");
            javax.mail.Session session = javax.mail.Session.getDefaultInstance(props);
            // se crea un objeto de sesion
            javax.mail.Session conexionCorreo = javax.mail.Session.getInstance(props, null);
            // Para obtener un log de salida más extenso
            session.setDebug(true);
            // este objeto representa el mensaje a enviar
            Message mensaje = new MimeMessage(conexionCorreo);
            // los objetos Adress contienen informacion de recipientes de correo
            Address desde = new InternetAddress("dp1.grupod@gmail.com",
                    "Seguridad RedEx");
            Address para = new InternetAddress(correo);
            // asignamos el contenido. En este caso usamos 'text/plain' pero
            // es posible usar 'text/html' para enviar correos con contenido
            // HTML
            mensaje.setContent(message, "text/plain");
            // asignar el origen del correo
            mensaje.setFrom(desde);
            // asignar un destinatario
            mensaje.setRecipient(Message.RecipientType.TO, para);
            // asignar el asunto del correo
            mensaje.setSubject(subject);
            Transport t = session.getTransport("smtp");
            // Aqui usuario y password de gmail
            t.connect("dp1.grupod@gmail.com", "dp1.grupodpucp");
            t.sendMessage(mensaje, mensaje.getAllRecipients());
            t.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void enviarCorreoCliente(List<Paquete> listaPaquetes) {
        try {
            //Key clave = KeyGenerator.getInstance(usuarioController.ALGORITMO).generateKey();

            //Cipher c = Cipher.getInstance(usuarioController.ALGORITMO);
            String subject = "RedEx - Registro de envio de paquete(s)";
            String message = "Estimado(a) " + listaPaquetes.get(0).getCliente().getCadenaNombreCompletoCliente()+ "\n\n"
                    + "Se ha registrado el envio de los siguiente paquetes:\n\n"
                    + "Codigo Paquete \t\t Origen-Destino \t\t Receptor \n";

            Paquete paquete = new Paquete();

            for (int i = 0; i < listaPaquetes.size(); i++) {
                paquete = listaPaquetes.get(i);
                //***VERIFICAR SI ES IDPAQUETE O IDENTIFICADOR
                message = message.concat(Integer.toString(paquete.getIdPaquete()) + " \t" + paquete.getCiudadByIdCiudadOrigen().getCiudad() + "-" + paquete.getCiudadByIdCiudadDestino().getCiudad()
                        + " \t" + paquete.getNombresReceptor() + " " + paquete.getApPatReceptor() + "\n");
            }

            message = message.concat("\n\nAtte, \n\n"
                    + "Administracion,\n"
                    + "RedEx");

            // Se debe crear un <span id="IL_AD4" class="IL_AD">archivo</span> de propiedades que
            // contenga el nombre del servidor SMTP
            Properties props = new Properties();

            // Nombre del host de correo, es smtp.gmail.com
            props.setProperty("mail.smtp.host", "smtp.gmail.com");
            // TLS si está disponible
            props.setProperty("mail.smtp.starttls.enable", "true");
            // Puerto de gmail para envio de correos
            props.setProperty("mail.smtp.port", "587");
            // Nombre del usuario
            props.setProperty("mail.smtp.user", "dp1.grupod@gmail.com");
            // Si requiere o no usuario y password para conectarse.
            props.setProperty("mail.smtp.auth", "false");
            javax.mail.Session session = javax.mail.Session.getDefaultInstance(props);
            // se crea un objeto de sesion
            javax.mail.Session conexionCorreo = javax.mail.Session.getInstance(props, null);
            // Para obtener un log de salida más extenso
            session.setDebug(true);
            // este objeto representa el mensaje a enviar
            Message mensaje = new MimeMessage(conexionCorreo);
            // los objetos Adress contienen informacion de recipientes de correo
            Address desde = new InternetAddress("dp1.grupod@gmail.com", "RedEx");
            Address para = new InternetAddress(listaPaquetes.get(0).getCliente().getEmail());
            // asignamos el contenido. En este caso usamos 'text/plain' pero
            // es posible usar 'text/html' para enviar correos con contenido
            // HTML
            mensaje.setContent(message, "text/plain");
            // asignar el origen del correo
            mensaje.setFrom(desde);
            // asignar un destinatario
            mensaje.setRecipient(Message.RecipientType.TO, para);
            // asignar el asunto del correo
            mensaje.setSubject(subject);
            Transport t = session.getTransport("smtp");
            // Aqui usuario y password de gmail
            t.connect("dp1.grupod@gmail.com", "dp1.grupodpucp");
            t.sendMessage(mensaje, mensaje.getAllRecipients());
            t.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void enviarCorreoRecepcion(Paquete paquete) {
        try {
            //Key clave = KeyGenerator.getInstance(usuarioController.ALGORITMO).generateKey();

            //Cipher c = Cipher.getInstance(usuarioController.ALGORITMO);
            String subject = "RedEx - Envio de paquete(s)";
            String message = "Estimado(a) " + paquete.getNombresReceptor() + "\n\n"
                    + "Le han enviado los siguiente paquetes:\n\n"
                    + "Codigo Paquete: " + Integer.toString(paquete.getIdPaquete()) + "\n"
                    + "Enviado por: " + paquete.getCliente().getCadenaNombreCompletoCliente() + "\n"
                    + "Enviado Desde: " + paquete.getCiudadByIdCiudadOrigen().getCiudad() + "\n\n"
                    + "Atte, \n\n"
                    + "Administracion,\n"
                    + "RedEx";

            // Se debe crear un <span id="IL_AD4" class="IL_AD">archivo</span> de propiedades que
            // contenga el nombre del servidor SMTP
            Properties props = new Properties();

            // Nombre del host de correo, es smtp.gmail.com
            props.setProperty("mail.smtp.host", "smtp.gmail.com");
            // TLS si está disponible
            props.setProperty("mail.smtp.starttls.enable", "true");
            // Puerto de gmail para envio de correos
            props.setProperty("mail.smtp.port", "587");
            // Nombre del usuario
            props.setProperty("mail.smtp.user", "dp1.grupod@gmail.com");
            // Si requiere o no usuario y password para conectarse.
            props.setProperty("mail.smtp.auth", "false");
            javax.mail.Session session = javax.mail.Session.getDefaultInstance(props);
            // se crea un objeto de sesion
            javax.mail.Session conexionCorreo = javax.mail.Session.getInstance(props, null);
            // Para obtener un log de salida más extenso
            session.setDebug(true);
            // este objeto representa el mensaje a enviar
            Message mensaje = new MimeMessage(conexionCorreo);
            // los objetos Adress contienen informacion de recipientes de correo
            Address desde = new InternetAddress("dp1.grupod@gmail.com", "RedEx");
            Address para = new InternetAddress(paquete.getEmailReceptor());
            // asignamos el contenido. En este caso usamos 'text/plain' pero
            // es posible usar 'text/html' para enviar correos con contenido
            // HTML
            mensaje.setContent(message, "text/plain");
            // asignar el origen del correo
            mensaje.setFrom(desde);
            // asignar un destinatario
            mensaje.setRecipient(Message.RecipientType.TO, para);
            // asignar el asunto del correo
            mensaje.setSubject(subject);
            Transport t = session.getTransport("smtp");
            // Aqui usuario y password de gmail
            t.connect("dp1.grupod@gmail.com", "dp1.grupodpucp");
            t.sendMessage(mensaje, mensaje.getAllRecipients());
            t.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void enviarCorreoNuevo(Usuario usuario) {

        try {
            //Key clave = KeyGenerator.getInstance(usuarioController.ALGORITMO).generateKey();

            //Cipher c = Cipher.getInstance(usuarioController.ALGORITMO);
            String subject = "RedEx - Nuevo Usuario";
            String message = "Estimado(a),\n\n"
                    + "Se le ha creado su usuario en el sistema\n\n"
                    + "Usuario: "+ usuario.getUsuario()+"\n\n"
                    + "Contrasena: " + usuario.getPassword() + "\n\n"
                    + "Atentamente, \n\n"
                    + "Equipo de Seguridad,\n"
                    + "RedEx";

            // Se debe crear un <span id="IL_AD4" class="IL_AD">archivo</span> de propiedades que
            // contenga el nombre del servidor SMTP
            Properties props = new Properties();

            // Nombre del host de correo, es smtp.gmail.com
            props.setProperty("mail.smtp.host", "smtp.gmail.com");
            // TLS si está disponible
            props.setProperty("mail.smtp.starttls.enable", "true");
            // Puerto de gmail para envio de correos
            props.setProperty("mail.smtp.port", "587");
            // Nombre del usuario
            props.setProperty("mail.smtp.user", "dp1.grupod@gmail.com");
            // Si requiere o no usuario y password para conectarse.
            props.setProperty("mail.smtp.auth", "false");
            javax.mail.Session session = javax.mail.Session.getDefaultInstance(props);
            // se crea un objeto de sesion
            javax.mail.Session conexionCorreo = javax.mail.Session.getInstance(props, null);
            // Para obtener un log de salida más extenso
            session.setDebug(true);
            // este objeto representa el mensaje a enviar
            Message mensaje = new MimeMessage(conexionCorreo);
            // los objetos Adress contienen informacion de recipientes de correo
            Address desde = new InternetAddress("dp1.grupod@gmail.com",
                    "Seguridad RedEx");
            Address para = new InternetAddress(usuario.getEmail());
            // asignamos el contenido. En este caso usamos 'text/plain' pero
            // es posible usar 'text/html' para enviar correos con contenido
            // HTML
            mensaje.setContent(message, "text/plain");
            // asignar el origen del correo
            mensaje.setFrom(desde);
            // asignar un destinatario
            mensaje.setRecipient(Message.RecipientType.TO, para);
            // asignar el asunto del correo
            mensaje.setSubject(subject);
            Transport t = session.getTransport("smtp");
            // Aqui usuario y password de gmail
            t.connect("dp1.grupod@gmail.com", "dp1.grupodpucp");
            t.sendMessage(mensaje, mensaje.getAllRecipients());
            t.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }

}
